
//Include interne
#include "BdRegistry.h"
#include "BdBibliotheque.h"
#include "BdTraceTerminal.h"
#include "BdEditeur.h"
#include "BdTypeDef.h"
//Include QT
#include <QMap>

BdRegistry::BdRegistry() :
    maxIdBibliotheque(0),
    maxIdEditeur(0),
    mBibliotheques(QMap<int, BdBibliotheque*>()),
    mEditeurs(BdEditeurMap())
{
  //Noop
}

//Static Function
BdRegistry *BdRegistry::mInstance = 0;
BdRegistry *BdRegistry::instance()
{
  if (mInstance == 0)
  {
    mInstance = new BdRegistry();
  }
  return mInstance;
}

BdBibliotheque* BdRegistry::addBibliotheque(BdBibliotheque* myBiblio)
{
	if(!myBiblio->isValid())
	{
                BdTraceTerminal::instance()->warning("Imposible d'ajouter cette bibliotheque, elle est non valide.");
		return 0;
	}
	
	QMap<int, BdBibliotheque*>::iterator it = mBibliotheques.find(myBiblio->id());
	
	if(it == mBibliotheques.end()) // n'est pas dans la liste
	{
		//Add to the map
		mBibliotheques[myBiblio->id()] = myBiblio;
                BdTraceTerminal::instance()->information("Bibliotheque ajoute dans le registre.");
                if(myBiblio->id() > maxIdBibliotheque)
                {
                  maxIdBibliotheque = myBiblio->id();
                }
	}
	else
	{
                BdTraceTerminal::instance()->warning("Imposible d'ajouter cette bibliotheque, elle existe deja dans le registre.");
		return 0;
	}
}

int BdRegistry::getGoodIdBibliotheque()
{
  BdTraceTerminal::instance()->information(QString("Registre renvoie un id valide : ") + QString::number(maxIdBibliotheque+1));
  return maxIdBibliotheque+1;
}

BdEditeur* BdRegistry::addEditeur(BdEditeur* myEditeur)
{	
  BdEditeurMap::iterator it = mEditeurs.find(myEditeur->id());
  
  if(it == mEditeurs.end()) // n'est pas dans la liste
  {
		//Add to the map
    mEditeurs[myEditeur->id()] = myEditeur;
    BdTraceTerminal::instance()->information("Editeur ajoute dans le registre.");
    if(myEditeur->id() > maxIdEditeur)
    {
      maxIdEditeur = myEditeur->id();
    }
  }
  else
  {
    BdTraceTerminal::instance()->warning("Imposible d'ajouter cet editeur, elle existe deja dans le registre.");
    return 0;
  }
}

int BdRegistry::getGoodIdEditeur()
{
  BdTraceTerminal::instance()->information(QString("Registre renvoie un id valide : ") + QString::number(maxIdEditeur+1));
  return maxIdEditeur+1;
}



